package main

import "fmt"

// ==========指针==========
// 1、不能对常量取地址
// 2、不能对字符串中某一个字符取地址

func main() {
	// 1、获取变量地址用&, 格式化输出地址用%p
	var i int
	fmt.Printf("iAddress = %p\n", &i) // iAddress = 0xc00001c088
	// 声明一个类型为*int的指针变量ptr, 并将变量i的地址赋给它
	// 指针变量的类型必须与它所指向的变量值的类型一致
	// 若ptr指向的是int类型变量的地址, 那ptr的类型就是*int
	// 若ptr指向的是float64类型变量的地址, 那ptr的类型就是*float64
	// 若ptr指向的是[]int类型变量的地址, 那ptr的类型就是*[]int
	var ptr *int = &i
	fmt.Printf("ptrValue = %v, ptrAddress = %p\n", ptr, &ptr) // ptrValue = 0xc00001c088, ptrAddress = 0xc00000e030
	// 在指针变量前面加上*就是取出它所指向地址的值
	fmt.Printf("i = %v\n", *ptr) // 0
	// 通过指针修改变量
	*ptr = 1
	fmt.Printf("i = %v\n", i) // 1
}
